<template>
  <ContentWrap>
    <el-space wrap>
      <mdp-select
        item-code="mcate"
        v-model="filters.mcate"
        placeholder="分类"
        class="hidden-md-and-down"
      />
      <el-input
        v-model="filters.id"
        style="width: 20%"
        placeholder="编号查询"
        clearable
        title="支持>、<、 >=、<=、!=、*陈*、$IS NULL、$IN 1,2,3、between 1,5等操作符"
      />
      <el-input
        v-model="filters.name"
        style="width: 20%"
        placeholder="名称查询"
        clearable
        title="支持>、<、 >=、<=、!=、*陈*、$IS NULL、$IN 1,2,3、between 1,5等操作符"
      />

      <el-button
        v-loading="load.list"
        :disabled="load.list == true"
        @click="searchTableDatas()"
        icon="search"
        type="primary"
        >查询
      </el-button>
    </el-space>
    <template #header>
      <el-space wrap>
        <mdp-hi-query
          :column-configs="columnConfigs"
          v-model="hiQueryParams"
          @change="onHiQueryParamsChange"
        />
        <el-button icon="zoom-out" @click="searchReset()" title="重置查询条件"/>

        <el-button icon="download" @click="export2Excel()" title="导出当前结果" />
        <mdp-table-configs :column-configs="columnConfigs" v-model="checkedColumns" />
        <span v-if="currOpType == 'mng'">
          <el-button
            :disabled="
              disBtn('delBtn') ||
              !checkBtnQx('delBtn', menuDefId) ||
              this.sels.length === 0 ||
              load.del == true
            "
            type="danger" plain
            v-loading="load.del"
            @click="batchDel"
            icon="delete"
          />
          <el-button
            :disabled="disBtn('addBtn') || !checkBtnQx('addBtn', menuDefId)"
            type="primary" plain
            @click="openForm({ parentOpType: currOpType, subOpType: 'add', formData: addForm })"
            icon="plus"
          />
        </span>
        <span v-else-if="currOpType == 'select' && this.multiple == true">
          <el-button
            :disabled="disBtn('selectBtn') || this.sels.length === 0"
            type="primary"
            @click="selectListConfirm"
            icon="check"
          />
        </span>
      </el-space>
    </template>
  </ContentWrap>
  <!--列表 MenuModule 模块定义表-用于进行机构级别的权限控制，机构如果购买了模块，则能够进行访问-->
  <el-table
    v-adaptive
    :ref="refId + 'Table'"
    :data="tableDatas"
    @sort-change="sortChange"
    highlight-current-row
    v-loading="load.list"
    border
    @selection-change="selsChange"
    @row-click="rowClick"
    style="width: 100%"
  >
    <el-table-column
      type="selection"
      width="55"
      show-overflow-tooltip
      fixed="left"
      v-if="currOpType == 'mng' || this.multiple == true"
    />
    <el-table-column sortable type="index" width="55" show-overflow-tooltip fixed="left" />
    <el-table-column
      prop="id"
      label="编号"
      min-width="120"
      show-overflow-tooltip
      fixed="left"
      col-type="String"
      v-if="showCol('id')"
    />
    <el-table-column
      prop="name"
      label="模块名称"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('name')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.name"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'name', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="status"
      label="状态"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('status')"
    >
      <template #default="scope">
        <mdp-select
          @click="rowClick(scope.row)"
          show-style="tag"
          item-code="module_status"
          v-model="scope.row.status"
          :maxlength="1"
          @change="editSomeFields(scope.row, 'status', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="fee"
      label="总包费用"
      min-width="120"
      show-overflow-tooltip
      col-type="BigDecimal"
      v-if="showCol('fee')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.fee"
          :maxlength="10"
          :disabled="disField"
        >
          <template #info>总包￥ {{ scope.row.fee }}</template>
        </mdp-input>
      </template>
    </el-table-column>
    <el-table-column
      prop="uniFee"
      label="人均费用"
      min-width="120"
      show-overflow-tooltip
      col-type="BigDecimal"
      v-if="showCol('uniFee')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.uniFee"
          :maxlength="10"
          :disabled="disField"
        >
          <template #info>人天￥ {{ scope.row.uniFee }}</template>
        </mdp-input>
      </template>
    </el-table-column>
    <el-table-column
      prop="billMode"
      label="计费模式"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('billMode')"
    >
      <template #default="scope">
        <mdp-select
          @click="rowClick(scope.row)"
          show-style="tag"
          item-code="moduleBillMode"
          v-model="scope.row.billMode"
          :maxlength="1"
          @change="editSomeFields(scope.row, 'billMode', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="url"
      label="计费地址"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('url')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.url"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'url', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="ignoreUrl"
      label="忽略地址"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('ignoreUrl')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.ignoreUrl"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'ignoreUrl', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="bizFlowState"
      label="审核状态"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('bizFlowState')"
    >
      <template #default="scope">
        <mdp-select
          @click="rowClick(scope.row)"
          show-style="tag"
          item-code="bizFlowState"
          v-model="scope.row.bizFlowState"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'bizFlowState', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="mcate"
      label="分类"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('mcate')"
    >
      <template #default="scope">
        <mdp-select
          @click="rowClick(scope.row)"
          show-style="tag"
          item-code="mcate"
          v-model="scope.row.mcate"
          :maxlength="50"
          @change="editSomeFields(scope.row, 'mcate', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="feeDesc"
      label="费用解释"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('feeDesc')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.feeDesc"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'feeDesc', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="udisRate"
      label="人数折算比例"
      min-width="120"
      show-overflow-tooltip
      col-type="Integer"
      v-if="showCol('udisRate')"
    >
      <template #default="scope">
        <mdp-number
          show-style="tag"
          v-model="scope.row.udisRate"
          :precision="0"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="udis"
      label="是否折算人数"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('udis')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.udis"
          :maxlength="1"
          @change="editSomeFields(scope.row, 'udis', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="saleDesc"
      label="营销文案"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('saleDesc')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.saleDesc"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'saleDesc', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="ucheck"
      label="是否控制总人数"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('ucheck')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.ucheck"
          :maxlength="1"
          @change="editSomeFields(scope.row, 'ucheck', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="crowd"
      label="是否为众包"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('crowd')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.crowd"
          :maxlength="1"
          @change="editSomeFields(scope.row, 'crowd', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="seq"
      label="序号"
      min-width="120"
      show-overflow-tooltip
      col-type="Integer"
      v-if="showCol('seq')"
    >
      <template #default="scope">
        <mdp-number
          show-style="tag"
          v-model="scope.row.seq"
          :precision="0"
          :disabled="disField"
        />
      </template>
    </el-table-column>

    <el-table-column
      prop="logoUrl"
      label="logo地址"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('logoUrl')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.logoUrl"
          :maxlength="255"
          @change="editSomeFields(scope.row, 'logoUrl', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column
      prop="discount"
      label="折扣比率"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('discount')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.discount"
          @change="editSomeFields(scope.row, 'discount', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>

    <el-table-column
      prop="procInstId"
      label="审核流程实例编号"
      min-width="120"
      show-overflow-tooltip
      col-type="String"
      v-if="showCol('procInstId')"
    >
      <template #default="scope">
        <mdp-input
          show-style="tag"
          v-model="scope.row.procInstId"
          :maxlength="50"
          @change="editSomeFields(scope.row, 'procInstId', $event)"
          :disabled="disField"
        />
      </template>
    </el-table-column>
    <el-table-column label="操作" :width="currOpType == 'mng' ? 200 : 200" fixed="right">
       <template #default="scope" v-if="currOpType == 'mng'">
        <el-button
          :disabled="disBtn('editBtn') || !checkBtnQx('editBtn', menuDefId)"
          type="primary"
          @click="openForm({ parentOpType: currOpType, subOpType: 'edit', formData: scope.row })"
          icon="edit"
          title="修改一条数据"
        />
        <el-button
          :disabled="disBtn('addBtn') || !checkBtnQx('addBtn', menuDefId)"
          type="success"
          @click="copy(scope.row)"
          icon="document-copy"
          title="拷贝并新增一条除了主键不一样其它都一样的数据"
        />
        <el-button
          :disabled="disBtn('delBtn') || !checkBtnQx('delBtn', menuDefId)"
          type="danger"
          @click="handleDel(scope.row, scope.$index)"
          icon="delete"
          title="删除一条数据"
        />
      </template>

      <template #default="scope" v-else-if="currOpType == 'list'">
        <el-button
          type="primary"
          @click="openForm({ parentOpType: currOpType, subOpType: 'detail', formData: scope.row })"
          icon="view"
        />
      </template>

      <template #default="scope" v-else-if="currOpType == 'select' && this.multiple != true">
        <el-button type="primary" @click="selectConfirm(scope.row)" icon="check" />
      </template>
    </el-table-column>
  </el-table>
  <el-pagination
    class="padding-top"
    layout="slot,total, sizes, prev, next,pager,jumper"
    @current-change="handleCurrentChange"
    @size-change="handleSizeChange"
    :page-sizes="[10, 20, 50, 100, 500]"
    :current-page="pageInfo.pageNum"
    :page-size="pageInfo.pageSize"
    :total="pageInfo.total"
  />
  <!--新增修改明细 MenuModule 模块定义表-用于进行机构级别的权限控制，机构如果购买了模块，则能够进行访问界面-->
  <mdp-dialog :ref="refId + 'FormDialog'">
    <template #default="{ visible, data }">  
      <MenuModuleForm
        :ref="refId + 'Form'"
        :visible="visible"
        :parent-op-type="currOpType"
        :sub-op-type="data.subOpType"
        :form-data="data.formData"
        @close="onFormClose"
        @submit="afterFormSubmit"
        @fields-change="afterEditSomeFields"
      />
    </template>
  </mdp-dialog>
</template>

<script>
import util from '@/components/mdp-ui/js/util' //全局公共库
import { MdpTableMixin } from '@/components/mdp-ui/mixin/MdpTableMixin.js'
import config from '@/api/mdp_pub/mdp_config' //全局公共库
import * as MenuModuleApi from '@/api/mdp/menu/menuModule'
import MenuModuleForm from './Form.vue' //新增修改明细界面
import { mapState } from 'pinia'
import { useUserStore } from '@/store/modules/user'

export default {
  name: 'menuModuleMng',
  mixins: [MdpTableMixin],
  components: {
    MenuModuleForm
  },
  computed: {},
  watch: {},
  data() {
    return {
      menuDefId: '', //menu_def.id 菜单表菜单编号，用于按钮权限判断
      menuDefName: '模块定义表-用于进行机构级别的权限控制，机构如果购买了模块，则能够进行访问', //menu_def.name 功能名称，用于导出excel等文件名
      refId: 'menuModule', //引用编号，<table :ref="refId+'Table'"> <form :ref="refId+'Form'">
      pkNames: ['id'], //表格主键的java属性名称，驼峰命名，默认为id,支持多主键
      currOpType: 'mng', //表格 mng-综合管理具有最大权限，所有按钮可动、detail-只看不能操作
      filters: {
        //查询参数
      },
      defaultFilters: {
        //默认查询参数,第一次打开界面的时候用到，恢复默认值的时候用到
      },

      defaultCheckColumnNum: 8, //默认展示的表格列数，前8列

      //增删改查(含批量)接口
      apis: {
        list: MenuModuleApi.listMenuModule,
        add: MenuModuleApi.addMenuModule,
        del: MenuModuleApi.delMenuModule,
        edit: MenuModuleApi.editMenuModule,
        editSomeFields: MenuModuleApi.editSomeFieldsMenuModule,
        batchAdd: MenuModuleApi.batchAddMenuModule,
        batchDel: MenuModuleApi.batchDelMenuModule,
        batchEdit: MenuModuleApi.batchEditMenuModule
      }
    }
  },
  methods: {
    //页面初始化需要配置的特殊逻辑写这里
    initCurrData() {
      this.searchTableDatas()
    },

    /**
     * 检查参数是否满足调用后台接口的条件
     *
     * @param params 提交给后台的参数池,map类型
     * @returns true / false
     */
    preQueryParamCheck(params) {
      return true
    },

    //页面数据加载完后需要对数据进行加工处理的
    afterList(res, isOk, apiName) {},

    /**
     * 对修改的字段进行判断，返回false ,将取消更新数据库
     * @param {*} row 当前选中的行
     * @param {*} fieldName 修改的字段名
     * @param {*} $event 修改后的值
     * @param {*} params 将要提交服务器的参数
     * @returns true/false 返回false ,将取消更新数据库
     */
    editSomeFieldsCheck(row, fieldName, $event, params) {
      if (this.currOpType == 'add' || this.currOpType == 'detail') {
        return false
      }
      params[fieldName] = $event
      return true
    }, 
    /**
     * 打开某个子页面
     */
    openForm(res) {
      let { parentOpType, formRefId, subOpType, formData } = res
      if (!formRefId) {
        formRefId = this.getRefId() + 'FormDialog'
      }
      if (!parentOpType) {
        parentOpType = this.currOpType
      }
      var form = this.$refs[formRefId]
      if (form) {
        res.parentOpType = parentOpType
        res.formRefId = formRefId
        form.open(res)
      } else {
      }
    }
  },
  mounted() {}
}
</script>

<style scoped>
</style>
